/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package accesodatos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

/**
 *
 * @author User
 */
public class LoadDimensiones {
    
    //private FachadaBD fachadabd;
    DaoDimensiones daoDimensiones;
    Escritor escritor;
    FachadaDW fdw = new FachadaDW();
    
    
    
    public LoadDimensiones(){
        daoDimensiones=new DaoDimensiones();
        escritor= new Escritor();
    }
    
    public ArrayList<String> getMedicosDW(){
        
        ArrayList<String> resultadosmedicosDW = new ArrayList<>();

        String sql_select;
        sql_select = "SELECT * FROM dimension_medico";
        
        try{
            
            Connection conn = fdw.conectar();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            //System.out.println("Codigo\tNombre\tPrograma");
            //
            String resultado = "";
            
            while(tabla.next()){
                
                resultado = "";
                resultado += "'" + tabla.getString("identificacion") + "'" + "," + "'" + 
                        tabla.getString("Nombre") + "'" + ",";
                resultado += "'" + tabla.getString("Especialidad")+"' ," + 
                        tabla.getString("Subespecialidad");
                resultado += "'" + tabla.getString("Licencia") + "'" + ",";
                resultado += "'" + tabla.getString("Direccion_Consultorio") + "'";
                
                resultadosmedicosDW.add(resultado);
            }
            
            conn.close();
            return resultadosmedicosDW;
        
        }catch (SQLException e) {
            System.out.println(e);
        
        } catch (Exception e) {
            System.out.println(e);
        }
        return null;
    }
     
    // metodo que construye los inserts, se conecta a la data warehouse y los agrega
    public ArrayList<String> construirInsertMedico(){
       
        LoadDimensiones load = new LoadDimensiones();
        
        ArrayList<String> medicosTran= daoDimensiones.getMedicos();
        
       
        
        
        
        
        ArrayList<String> InsertMedicos = new ArrayList<>();
        
        for(int i=0;i < medicosTran.size();i++){
            System.out.println("INSERT INTO dimension_medico(identificacion,nombre,especialidad,subespecialidad,licencia,direccion_consultorio) VALUES" + 
                   "(" + medicosTran.get(i) +")") ;
            InsertMedicos.add("INSERT INTO dimension_medico(identificacion,nombre,especialidad,subespecialidad,licencia,direccion_consultorio) VALUES" + 
                   "(" + medicosTran.get(i) +");");
        }
        
  
        return InsertMedicos;
        }
    
    
    public void EscribirArchivoDimensionMedico(){
        escritor.Escribir(construirInsertMedico(), "insertMedico.sql");
    }
    
    public ArrayList<String> construirInsertIps(){
        ArrayList<String> ipsTran = daoDimensiones.getIps();
        ArrayList<String> insertIps= new ArrayList<String>();
        for(int i=0;i<ipsTran.size();i++){
            System.out.println("INSERT INTO dimension_ips (key_ips, tipo_ips,nombre,direccion,nivel,id_ciudad) VALUES" + 
                    "("+ipsTran.get(i)+");");
            insertIps.add("INSERT INTO dimension_ips (key_ips, tipo_ips,nombre,direccion,nivel,id_ciudad) VALUES" + 
                    "("+ipsTran.get(i)+");");
        }
        return insertIps;
        
    }
    
    public void EscribirArchivoDimensionIPS(){
        escritor.Escribir(construirInsertIps(), "insertIps.sql");
    }
    
    public ArrayList<String> construirInsertEmpleadores(){
        ArrayList<String> empresas = daoDimensiones.getEmpleadores();
        ArrayList<String> insertEmpresas = new ArrayList<String>();
        
        for(int i=0;i<empresas.size();i++){
            System.out.println("INSERT INTO dimension_empleador (nit, nombre,total_empleados,direccion, actividad_economica, ciudad) VALUES" +
                    "("+empresas.get(i) +");");
            
            insertEmpresas.add("INSERT INTO dimension_empleador (nit, nombre,total_empleados,direccion, actividad_economica, ciudad) VALUES" +
                    "("+empresas.get(i) +");");
        }
        return insertEmpresas;
        
        
    }
    
    public void EscribirArchivoDimensionEmpleador(){
        escritor.Escribir(construirInsertEmpleadores(), "insertEmpleador.sql");
    }
    
    public ArrayList<String> ConstruirInsertMedicamentos(){
        ArrayList<String> medicamentos= daoDimensiones.getMedicamentos();
        ArrayList<String> insertMedicamentos= new ArrayList<String>();
        for(int i=0;i<medicamentos.size();i++){
            System.out.println("INSERT INTO dimension_medicamento (codigo, nombre_generico, forma_farmaceutica, presentacion, laboratorio_registro, tipo_medicamento) VALUES" +
                    "("+medicamentos.get(i)+");");
            
            insertMedicamentos.add("INSERT INTO dimension_medicamento (codigo, nombre_generico, forma_farmaceutica, presentacion, laboratorio_registro, tipo_medicamento) VALUES" +
                    "("+medicamentos.get(i)+");");
        }

        return insertMedicamentos;
    }
    
    public void EscribirArchvioDimensionMedicamento(){
        escritor.Escribir(ConstruirInsertMedicamentos(), "insertMedicamentos.sql");
    }
        
    public ArrayList<String> ConstruirInsertDepartamentos(){
        ArrayList<String> departamentos = daoDimensiones.getDepartamentos();
        ArrayList<String> insertDep = new ArrayList<String>();
        for(int i=0;i<departamentos.size();i++){
            System.out.println("INSERT INTO departamento (departamento)  VALUES " + "(" +departamentos.get(i)+ ");");
            insertDep.add("INSERT INTO departamento (departamento)  VALUES " + "(" +departamentos.get(i)+ ");");
        }
        return insertDep;
    }
    
    public void EscribirArchivoDepartamentos(){
        escritor.Escribir(ConstruirInsertDepartamentos(), "departamentos.sql");
    }
    
    public ArrayList<String> ConstruirInsertCiudades(){
        ArrayList<String> ciudades = daoDimensiones.getCiudades();
        ArrayList<String> insertDep = new ArrayList<String>();
        for(int i=0;i<ciudades.size();i++){
            System.out.println("INSERT INTO ciudad (ciudad, id_departamento)  VALUES " + "(" +ciudades.get(i)+ ");");
            insertDep.add("INSERT INTO ciudad (ciudad, id_departamento)  VALUES " + "(" +ciudades.get(i)+ ");");
        }
        return insertDep;
    }
    
    public void EscribirArchivoCiudades(){
        escritor.Escribir(ConstruirInsertCiudades(), "ciudades.sql");
    }
    
    public ArrayList<String> ConstruirInsertServicios(){
        
        ArrayList<String> servicios = daoDimensiones.getServiciosPOS();
        ArrayList<String> insertServicios = new ArrayList<String>();
        for(int i=0;i<servicios.size();i++){
            System.out.println("INSERT INTO dimension_serviciopos (codigo_servicio, descripcion)  VALUES " + "(" +servicios.get(i)+ ");");
            insertServicios.add("INSERT INTO dimension_serviciopos(codigo_servicio, descripcion)  VALUES " + "(" +servicios.get(i)+ ");");
        }
        return insertServicios;
    }
    
    public void EscribirArchivoServicios(){
        escritor.Escribir(ConstruirInsertServicios(), "serviciospos.sql");
    }
    
    public ArrayList<String>  ConstruirInsertDemografia(){
        ArrayList<String> demografia = daoDimensiones.getDemografia();
        ArrayList<String> insertDemografia = new ArrayList<String>();
        for(int i=0;i<demografia.size();i++){
            System.out.println("INSERT INTO dimension_demografica (sexo, estado_civil, nivel_escolaridad,direccion,estrato,salario_base) VALUES" +
                    "("+demografia.get(i)+");");
            insertDemografia.add("INSERT INTO dimension_demografica (sexo, estado_civil, nivel_escolaridad,direccion,estrato,salario_base) VALUES" +
                    "("+demografia.get(i)+");");
        }        
        return insertDemografia;
    }
    
    public void EscribirArchivoDemografia(){
        escritor.Escribir(ConstruirInsertDemografia(), "demografia.sql");
    }
    
    public ArrayList<String> ConstruirInsertAfiliados(){
        ArrayList<String> afiliados = daoDimensiones.getAfiliados();
        ArrayList <String> insertAfiliados = new ArrayList<String>();
        for(int i=0;i<afiliados.size();i++){
            System.out.println("INSERT INTO dimension_afiliado (tipo_afiliacion,tipo_identificacion,identificacion,nombre, fecha_nacimiento,tipo_discapacidad,"
                    + "tipo_cotizante, eps_previa) VALUES " + "("+afiliados.get(i)+");");
            insertAfiliados.add("INSERT INTO dimension_afiliado (tipo_afiliacion,tipo_identificacion,identificacion,nombre, fecha_nacimiento,tipo_discapacidad,"
                    + "tipo_cotizante, eps_previa) VALUES " + "("+afiliados.get(i)+");");
            
        }
        return insertAfiliados;
    }
   
    public void EscribirArchivoAfiliados(){
        escritor.Escribir(ConstruirInsertAfiliados(), "insertAfiliados.sql");
    }
    
    public ArrayList<String> ConstruirInsertDiagnosticos(){
        ArrayList<String> diagnosticos = daoDimensiones.getDiagnosticos();
        ArrayList<String> insertDia= new ArrayList<String>();
        for(int i=0;i<diagnosticos.size();i++){
            System.out.println("INSERT INTO dimension_diagnostico (descripcion) VALUES" + "("+ diagnosticos.get(i) +");");
            insertDia.add("INSERT INTO dimension_diagnostico (descripcion) VALUES" + "("+ diagnosticos.get(i) +");");
        }
        return insertDia;
    }
    
    public void EscribirArchivoDiagnosticos(){
        escritor.Escribir(ConstruirInsertDiagnosticos(), "insertDiagnosticos.sql");
    }
    
    public ArrayList<String> ConstruirInsertDimensionFecha(){
        
        ArrayList<String> fechasTransac = daoDimensiones.getFechas();
        ArrayList<String> fechasDW = new ArrayList<String>();
        
        for(int i=0;i<fechasTransac.size();i++){
            System.out.println("INSERT INTO fecha (fecha, dia, mes, anio, nombre_dia, nombre_mes, festivo, nombre_festivo) "
                    + "VALUES" + "("+ fechasTransac.get(i) +");");
            fechasDW.add("INSERT INTO fecha (fecha, dia, mes, anio, nombre_dia, nombre_mes, festivo, nombre_festivo) "
                    + "VALUES" + "("+ fechasTransac.get(i) +");");
        }
        return fechasDW;
    }
    
    public void EscribirArchivoFechas(){
        escritor.Escribir(ConstruirInsertDimensionFecha(), "insertFechas.sql");
    }
    
        public ArrayList<String> construirInsertGrupoFamiliar(){
        ArrayList<ArrayList<String>> grupoFamiliar = daoDimensiones.getGrupoFamiliar();
        ArrayList<String> insertGrupoFamiliar= new ArrayList<>();
        
        
        for(int i=0;i<grupoFamiliar.size();i++){
            System.out.println("LLLEGA");
            ArrayList aux = grupoFamiliar.get(i);
            for(int j = 0; j<aux.size(); j++){
                insertGrupoFamiliar.add("INSERT INTO grupo_familiar(idgrupo_familiar, id_afiliado, parentesco, afiliado_por) VALUES" +
                        "("+aux.get(j)+");");
            }
            
            
            
        }
        return insertGrupoFamiliar;
        
    }
        
            public void EscribirArchivoGrupoFamiliar(){
        escritor.Escribir(construirInsertGrupoFamiliar(), "insertGrupoFamiliar.sql");
    }
    
//    public static void main(String [] args){
//        
//        LoadDimensiones l = new LoadDimensiones();
//        System.out.println("hasta aqui llega");
//        l.construirInsertGrupoFamiliar();
//        
//        l.EscribirArchivoGrupoFamiliar();
//        //l.ConstruirInsertDiagnosticos();
//        //l.EscribirArchivoDiagnosticos();
//        //l.EscribirArchivoCiudades();
//        //l.EscribirArchivoDimensionIPS();
//       // l.EscribirArchivoServicios();
//        //l.EscribirArchivoAfiliados();
//      
//    }
    
}
